Virtual machines (VMs) play an important role in computing solutions and especially in cloud computing. A VM provides a software-based implementation of a hardware system giving the appearance that the VM is a separate stand-alone computer with its own processors, registers, memory, and I/O devices such as storage devices. Like many computers, VMs typically have an operating system running on them in which a user may launch and execute any number of applications. However, VMs provide greater flexibility than separate hardware platforms. As an example, a hardware platform can host multiple VMs with each of the VMs being used to create separate and isolated computing environments. Thus, a single hardware platform can be made to appear as several separate and distinct computers. This makes it possible for that single hardware platform to effectively take the place of many separate hardware platforms subject to processing power and other resource limitations.
VMs also provide flexibility in other ways. Because each VM emulates a hardware environment, each VM on a hardware platform may run a different operating system sometimes referred to as a guest operating system. For example, this allows the same hardware platform to have multiple VMs, each running different versions of Linux™ or Microsoft Windows™. In some cases each of the VMs could be running different operating systems including some VMs running Linux™ and others running Microsoft Windows™. It is even possible for a VM to emulate a completely different hardware system so that the same hardware platform could have some VMs emulating x86 PCs even though the underlying hardware platform is a Macintosh™ computer or some other kind of server. A further advantage of VMs is that they are often not tied to a specific hardware platform and may be moved from one hardware platform to another in a computer system.
The advantages of VMs in a cloud computing solution are numerous. Because VMs are not physical hardware systems they may be installed or moved to any hardware platform in the cloud. Additional VMs may also be added to and/or removed from the cloud computing environment without having to purchase or shut down hardware platforms. Thus, within reason, a fixed number of hardware platforms in a cloud computing solution may give the appearance of any number of separate computers with separate computing environments. This gives the cloud computing provider the flexibility to add and remove customers, services, and processing capability without having to make hardware changes each time a change in customer, service, or processing capability occurs. The flexibility may even extend to the ability to move or migrate VMs from one hardware platform to another to better manage changes in usages and loads. Additionally, the isolation of the VMs allows each customer or service to have its own separate, isolated, and secure computing environment.
In order to implement a VM, several elements of a hardware system are emulated so that they may be shared between the VMs running on a hardware platform. The most common elements emulated are processors, memory, and input/output (I/O). Other than cases where a VM implements a different hardware platform, emulation and sharing of the processors is generally straight-forward as the processors and registers may be time-shared. Memory is often a bit more complex, but because memory is largely interchangeable and virtual memory systems are well understood, this is generally not a problem. In contrast, I/O presents greater challenges depending on the type of I/O. Computer networking I/O using sharable resources such as local area networks (LANs) like an Ethernet, and wide area networks (WANs) like the internet may generally be time-shared like the processors. Other I/O, such as a computer monitor cannot be easily shared between VMs as two or more VMs cannot easily or legibly use the display at the same time and the short time-sharing intervals of the VMs is not practical for use with computer users. I/O for storage such as disk drives and flash drives typically falls somewhere in the middle as while storage devices may be shared between VMs in much the same way that memory can, the larger capacity of storage devices may introduce extra complications when VMs are migrated between hardware platforms. Storage Area Networks (SANs) and Network-Attached Storage (NAS) and other shared storage solutions are one way of addressing these complications, but they typically require expensive systems that are hosted separately from the hardware platforms on which the VMs are running. SANs and NAS also do not generally address storage devices that are local to a hardware platform.
Accordingly, it would be desirable to provide improved methods and systems for managing storage devices in computing systems with virtual machines.
In the figures, elements having the same designations have the same or similar functions.